#include "srkrtDynamicStack.h"

/* ---------------------------------------
	Declaration des fonctions 
--------------------------------------- */

void stack_create(Stack *s) {
       s->head = NULL;
       s->size = 0;
}

bool stack_is_empty(Stack *s) {
       return(!s->size);
}

bool stack_is_full(Stack *s) {
       return(s->size == MAX_SIZE);
}

void stack_add(Stack *s, Move m) {
       Cel *new = NULL;
              
       /* création de la nouvelle cellule */
       new = malloc(sizeof(Cel));
       
       if ( new == NULL ) {
	       fprintf(stderr, "Erreur in stack_add(), allocation impossible\n");
       } else {

		/* on lie la nouvelle cellule au reste de la pile */
		new->next = s->head;  

		/* on affecte l'élément */
		/* new->value.xi = m.xi;
		new->value.yi = m.yi;
		new->value.xf = m.xf;
		new->value.yf = m.yf;*/
		new->value = m;
		
		
		/* on lie la Pile à la nouvelle cellule */
		s->head = new;
		
		/* on incrémente size */
		(s->size)++;
       }

}


void stack_remove(Stack *s) {
       Cel *del;
       
       if (stack_is_empty(s)) { /* si la pile est vide */ 
	       fprintf(stderr, "Erreur in stack_remove(), la pile est vide !\n");
       } else {
       
		/* on recupere l'adresse de la cellule a supprimer */
		del = s->head;
		/* on lie la pile à la seconde cellule */
		s->head = s->head->next;
		/* on libère la mémoire */
		free(del);
		/* on décrémente size */
		(s->size)--;
       }
}

Move stack_head(Stack *s) {
       
	if (stack_is_empty(s)) { /* si la pile est vide */ 
		fprintf(stderr, "Erreur in stack_remove(), la pile est vide !\n");
	}
	
	return ((s->head)->value);
}
